home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 8 / The Arsenal Files Collection #8 (Arsenal Computer) (1996).ISO / prg_casm / snpd9611.zip / ISSHIFT.C < prev    next >
Text File  |  1996-11-24  |  2KB  |  93 lines

  1. .I 0 2
  2. /* +++Date last modified: 28-Sep-1996 */
  3.  
  4. .I 1 6
  5. /*             Determine whether a shift key is depressed       */
  6. /*                public domain snippet by Jeff Dunlop          */
  7. /*  Revisions:                                                  */
  8. /*  30-Mar-96  Ed Blackman  OS/2 mods, added #defines for keys, */
  9. /*                          wrapped platform dependant actions  */
  10. /*                          in a macro, added some discussion   */
  11. .D 2 2
  12. .I 5 3
  13. /*      kf =                                                    */
  14. /*          DOS: pointer to bios shift key area                 */
  15. /*          OS2: pointer to previously stored key info struct   */
  16. .D 6 1
  17. .I 7 1
  18. /*      non-zero if shift key is depressed                      */
  19. .D 8 1
  20. .I 14 18
  21. #ifdef __OS2__
  22. KBDKEYINFO ki;                            /* holds key status */
  23. #endif /* !__OS2__ */
  24.  
  25. int IsLeftShift(void)
  26. {
  27.       unsigned short FAR* kf = peekkey();
  28.  
  29.       return (*kf & LEFT_SHIFT);
  30. }
  31.  
  32. int IsRightShift(void)
  33. {
  34.       unsigned short FAR* kf = peekkey();
  35.  
  36.       return (*kf & RIGHT_SHIFT);
  37. }
  38.  
  39. .D 15 1
  40. .I 17 21
  41.       return (IsLeftShift()) || (IsRightShift());
  42. }
  43.  
  44. int IsLeftAlt(void)
  45. {
  46.       unsigned short FAR* kf = peekkey();
  47.  
  48.       return (*kf & EITHER_ALT) && (*kf & LEFT_ALT);
  49. }
  50.  
  51. int IsRightAlt(void)
  52. {
  53.       unsigned short FAR* kf = peekkey();
  54.  
  55. /* 30-Mar-96 - EBB: In DOS there is no direct way to tell if the right
  56. ** Alt key is depressed. DOS sets a status bit if either Alt key was
  57. ** pressed, and another if the left Alt key was pressed.  By
  58. ** elimination, we can say that the right Alt key was pressed if one of
  59. ** the Alt keys was pressed and it wasn't the left one.
  60. */
  61.     return (*kf & EITHER_ALT) && !(*kf & LEFT_ALT);
  62. .D 18 3
  63. .I 24 19
  64.       return (IsLeftAlt()) || (IsRightAlt());
  65. }
  66.  
  67. int IsLeftCtl(void)
  68. {
  69.       unsigned short FAR* kf = peekkey();
  70.  
  71.       return (*kf & EITHER_CTL) && (*kf & LEFT_CTL);
  72. }
  73.  
  74. int IsRightCtl(void)
  75. {
  76.     unsigned short FAR* kf = peekkey();
  77.  
  78. /* 30-Mar-96 - EBB: The discussion about the right Alt key in
  79. ** IsRightAlt() also applies to the right Ctl key
  80. */
  81.  
  82.       return (*kf & EITHER_CTL) && !(*kf & LEFT_CTL);
  83. .D 25 4
  84. .I 32 1
  85.       return (IsLeftCtl()) || (IsRightCtl());
  86. .D 33 4
  87. .I 40 4
  88.       unsigned short FAR* kf = peekkey();
  89.  
  90.       return (*kf & SYSRQ);
  91. }
  92. .D 41 4
  93.